package com.senlingspace.system.service;

import java.util.List;

import com.senlingspace.common.core.domain.AjaxResult;
import com.senlingspace.system.domain.SlkjFareScheme;
import com.senlingspace.system.domain.SlkjFareSchemeDetail;
import com.senlingspace.system.domain.SlkjFareSchemeShop;
import com.senlingspace.system.domain.vo.FareSchemeQueryVo;
import com.senlingspace.system.domain.dto.FareSchemeRespDto;
import com.senlingspace.system.domain.vo.FareSchemeRequest;

/**
 * 票价方案Service接口
 *
 * @author SenlingSpace
 * @date 2024-07-15
 */
public interface ISlkjFareSchemeService {
    /**
     * 查询票价方案
     *
     * @param id 票价方案主键
     * @return 票价方案
     */
    public AjaxResult selectSlkjFareSchemeById(Long id);

    /**
     * 查询票价方案列表
     *
     * @param slkjFareScheme 票价方案
     * @return 票价方案集合
     */
    public List<FareSchemeRespDto> selectSlkjFareSchemeList(FareSchemeQueryVo slkjFareScheme);

    /**
     * 新增票价方案
     *
     * @param fareSchemeRequest 票价方案
     * @return 结果
     */
    public AjaxResult insertSlkjFareScheme(FareSchemeRequest fareSchemeRequest, Long userId);

    /**
     * 修改票价方案
     *
     * @param request 票价方案
     * @return 结果
     */
    public AjaxResult updateSlkjFareScheme(FareSchemeRequest request, Long userId);

    /**
     * 批量删除票价方案
     *
     * @param ids 需要删除的票价方案主键集合
     * @return 结果
     */
    public AjaxResult deleteSlkjFareSchemeByIds(Long[] ids, Long userId);

    /**
     * 删除票价方案信息
     *
     * @param id 票价方案主键
     * @return 结果
     */
    public int deleteSlkjFareSchemeById(Long id);

    /**
     * 判断是否存在票档和票类
     *
     * @return int
     */
    int existsTicketLevelAndTicketCategory();

    /**
     * 获取票档和票类的数据
     *
     * @return {@link AjaxResult }
     */
    AjaxResult getTicketLevelCategory();

    /**
     * 店铺保存票价方案
     *
     * @param fareSchemeShop
     * @return {@link AjaxResult }
     */
    AjaxResult shopSaveFareScheme(SlkjFareSchemeShop fareSchemeShop);

    /**
     * 票价方案下拉框
     *
     * @return {@link AjaxResult }
     */
    AjaxResult schemeSelected();

    /**
     * 根据票价方案明细ID查询票价方案明细
     *
     * @param ids
     * @return {@link List }<{@link SlkjFareSchemeDetail }>
     */
    List<SlkjFareSchemeDetail> selectSlkjFareSchemeDetailByIds(List<Long> ids);

    /**
     * 根据票价方案ID查询票价方案
     *
     * @param fareIds
     * @return {@link List }<{@link SlkjFareScheme }>
     */
    List<SlkjFareScheme> selectSlkjFareSchemeByIds(List<Long> fareIds);

    /**
     * POS端获取项目对应的票价信息
     *
     * @param shopId
     * @param source 对应渠道，参照订单渠道枚举 @OrderSource
     * @return {@link AjaxResult }
     */
    AjaxResult projects(Long shopId, int source);

}
